package py.com.alfa.escriba.web.rest.impl;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;

import py.com.alfa.escriba.config.EscribaApplicationContextProvider;
import py.com.alfa.escriba.exception.ServiceException;
import py.com.alfa.escriba.persistence.dto.referencia.BarrioDTO;
import py.com.alfa.escriba.persistence.dto.referencia.DepartamentoDTO;
import py.com.alfa.escriba.persistence.dto.referencia.DistritoDTO;
import py.com.alfa.escriba.persistence.dto.referencia.EmpleoDTO;
import py.com.alfa.escriba.persistence.dto.referencia.LocalidadDTO;
import py.com.alfa.escriba.persistence.dto.referencia.TabRefDTO;
import py.com.alfa.escriba.web.rest.EscribaService;
import py.com.alfa.escriba.web.rest.dto.EmpleoResponseDTO;
import py.com.alfa.escriba.web.rest.secure.ReferenciaSecureRESTService;
import py.com.alfa.escriba.web.services.ReferenciaService;

public class ReferenciaSecureRESTServiceImpl implements ReferenciaSecureRESTService {

	private Logger log = LoggerFactory.getLogger(getClass());
	private ApplicationContext ctx;
	private ReferenciaService refe;
	
	public ReferenciaSecureRESTServiceImpl() {
		this.ctx = EscribaApplicationContextProvider.getContext();
		this.refe = (ReferenciaService)this.ctx.getBean(EscribaService.REFE_SERVICE);	
	}

	@Override
	public EmpleoResponseDTO obtenerEmpleos() throws ServiceException {
		this.log.debug("===== INI obtenerEmpleos ===");
		EmpleoResponseDTO dto = this.refe.obtenerEmpleos();		
		return dto;
	}

	@Override
	public EmpleoDTO crearEmpleo(EmpleoDTO dto) throws ServiceException {
		this.log.debug("===== INI crearEmpleo ===");
		EmpleoDTO res = this.refe.crearEmpleo(dto);		
		return res;
	}

	@Override
	public void moverEmpleo(Long id, Long idDestino) throws ServiceException {
		this.log.debug("===== INI moverEmpleo {} a {}===", id, idDestino);
		this.refe.moverEmpleo(id, idDestino);
		this.log.debug("===== FIN moverEmpleo ===\n");
	}

	@Override
	public EmpleoDTO actualizarEmpleo(EmpleoDTO dto) throws ServiceException {
		this.log.debug("===== INI actualizarEmpleo ===");
		EmpleoDTO res = this.refe.actualizarEmpleo(dto);		
		return res;
	}

	@Override
	public void eliminarEmpleo(Long id) throws ServiceException {
		this.log.debug("===== INI eliminarEmpleo {}===", id);
		this.refe.eliminarEmpleo(id);
		this.log.debug("===== FIN eliminarEmpleo ===\n");
	}

	@Override
	public List<DepartamentoDTO> obtenerDepartamentos() throws ServiceException {
		this.log.debug("===== INI obtenerDepartamentos ===");
		List<DepartamentoDTO> dto = this.refe.obtenerDepartamentos();		
		return dto;
	}

	@Override
	public DepartamentoDTO crearDepartamento(DepartamentoDTO dto) throws ServiceException {
		this.log.debug("===== INI crearDepartamento ===");
		DepartamentoDTO res = this.refe.crearDepartamento(dto);		
		return res;	
	}

	@Override
	public DepartamentoDTO actualizarDepartamento(DepartamentoDTO dto) throws ServiceException {
		this.log.debug("===== INI actualizarDepartamento ===");
		DepartamentoDTO res = this.refe.actualizarDepartamento(dto);		
		return res;
	}

	@Override
	public void eliminarDepartamento(String id) throws ServiceException {
		this.log.debug("===== INI eliminarDepartamento {}===", id);
		this.refe.eliminarDepartamento(id);
		this.log.debug("===== FIN eliminarDepartamento ===\n");
	}

	@Override
	public List<DistritoDTO> obtenerDistritos(String idDepartamento) throws ServiceException {
		this.log.debug("===== INI obtenerDistritos ===");
		List<DistritoDTO> dto = this.refe.obtenerDistritos(idDepartamento);		
		return dto;
	}

	@Override
	public DistritoDTO crearDistrito(DistritoDTO dto) throws ServiceException {
		this.log.debug("===== INI crearDistrito ===");
		DistritoDTO res = this.refe.crearDistritos(dto);		
		return res;
	}

	@Override
	public DistritoDTO actualizarDistrito(DistritoDTO dto) throws ServiceException {
		this.log.debug("===== INI actualizarDistrito ===");
		DistritoDTO res = this.refe.actualizarDistritos(dto);		
		return res;	
	}

	@Override
	public void eliminarDistrito(Long id) throws ServiceException {
		this.log.debug("===== INI eliminarDistrito {}===", id);
		this.refe.eliminarDistritos(id);
		this.log.debug("===== FIN eliminarDistrito ===\n");
	}

	@Override
	public List<BarrioDTO> obtenerBarrios(Long idDistrito) throws ServiceException {
		this.log.debug("===== INI obtenerBarrios ===");
		List<BarrioDTO> dto = this.refe.obtenerBarrios(idDistrito);		
		return dto;
	}

	@Override
	public BarrioDTO crearBarrio(BarrioDTO dto) throws ServiceException {
		this.log.debug("===== INI crearBarrio ===");
		BarrioDTO res = this.refe.crearBarrios(dto);		
		return res;
	}

	@Override
	public BarrioDTO actualizarBarrio(BarrioDTO dto) throws ServiceException {
		this.log.debug("===== INI actualizarBarrio ===");
		BarrioDTO res = this.refe.actualizarBarrios(dto);		
		return res;	
	}

	@Override
	public void eliminarBarrio(Long id) throws ServiceException {
		this.log.debug("===== INI eliminarBarrio {}===", id);
		this.refe.eliminarBarrios(id);
		this.log.debug("===== FIN eliminarBarrio ===\n");		
	}

	@Override
	public LocalidadDTO obtenerLocalidad(String idDepartamento) throws ServiceException {
		this.log.debug("===== INI obtenerLocalidad ===");
		LocalidadDTO dto = this.refe.obtenerLocalidad(idDepartamento);		
		return dto;
	}

	@Override
	public DepartamentoDTO obtenerDepartamento(String idDepartamento) throws ServiceException {
		this.log.debug("===== INI obtenerDepartamento {} ===", idDepartamento);
		DepartamentoDTO dto = this.refe.obtenerDepartamento(idDepartamento);		
		return dto;
	}

	@Override
	public DistritoDTO obtenerDistrito(Long idDistrito) throws ServiceException {
		this.log.debug("===== INI obtenerDistrito {} ===", idDistrito);
		DistritoDTO dto = this.refe.obtenerDistrito(idDistrito);		
		return dto;
	}

	@Override
	public List<TabRefDTO> obtenerTablaReferencia(String tabla) throws ServiceException {
		this.log.debug("===== INI obtenerTablaReferencia {} ===", tabla);
		List<TabRefDTO> dto = this.refe.obtenerTablaReferencia(tabla);		
		return dto;
	}

}
